001 /*
002 * Copyright 2006 Stephen McConnell.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package net.dpml.http;
017
018 import java.net.URI;
019 import java.util.Map;
020 import java.security.PermissionCollection;
021 import java.io.File;
022
023 import net.dpml.logging.Logger;
024
025 import org.mortbay.jetty.security.SecurityHandler;
026 import org.mortbay.jetty.servlet.SessionHandler;
027 import org.mortbay.jetty.servlet.ServletHandler;
028
029 /**
030 * Servlet context handler.
031 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
032 * @version 0.0.3
033 */
034 public class WebAppContextHandler extends org.mortbay.jetty.webapp.WebAppContext
035 {
036 /**
037 * HTTP static resource vontext handler parameters.
038 */
039 public interface Context extends ContextHandlerContext
040 {
041 /**
042 * Get the war artifact uri.
043 * @return the uri identifying the war artifact
044 */
045 URI getWar();
046
047 /**
048 * Get the assigned temp directory.
049 * @param dir the default temp directory
050 * @return the resolved temp directory
051 */
052 File getTempDirectory( File dir );
053
054 /**
055 * Get the resource alias map.
056 * @param map the default mapping
057 * @return the resolved map
058 */
059 Map getResourceAliases( Map map );
060
061 /**
062 * Get the war extraction policy.
063 * @param policy the default policy (true)
064 * @return the resolved policy
065 */
066 boolean getExtractionPolicy( boolean policy );
067
068 /**
069 * Get the assigned permission collection.
070 * @param permissions the default permissions value
071 * @return the resolved permissions collection
072 */
073 PermissionCollection getPermissions( PermissionCollection permissions );
074
075 /**
076 * Get the assigned security handler.
077 * @param handler the default value
078 * @return the resolved handler
079 */
080 SecurityHandler getSecurityHandler( SecurityHandler handler );
081
082 /**
083 * Get the assigned session handler.
084 * @param handler the default value
085 * @return the resolved handler
086 */
087 SessionHandler getSessionHandler( SessionHandler handler );
088
089 /**
090 * Get the assigned servlet handler.
091 * @param handler the default value
092 * @return the resolved handler
093 */
094 ServletHandler getServletHandler( ServletHandler handler );
095 }
096
097 private int m_priority = 0;
098
099 /**
100 * Creation of a new web-application context handler.
101 * @param logger the assigned logging channel
102 * @param context the deployment context
103 * @exception Exception if an instantiation error occurs
104 */
105 public WebAppContextHandler( Logger logger, Context context ) throws Exception
106 {
107 ContextHelper helper = new ContextHelper( logger );
108 helper.contextualize( this, context );
109
110 SecurityHandler securityHandler =
111 context.getSecurityHandler( new SecurityHandler() );
112 setSecurityHandler( securityHandler );
113 setHandler( securityHandler );
114
115 SessionHandler sessionHandler =
116 context.getSessionHandler( new SessionHandler() );
117 securityHandler.setHandler( sessionHandler );
118 setSessionHandler( sessionHandler );
119
120 ServletHandler servletHandler =
121 context.getServletHandler( new ServletHandler() );
122 sessionHandler.setHandler( servletHandler );
123 setServletHandler( servletHandler );
124
125 URI uri = context.getWar();
126 setWar( uri.toASCIIString() );
127
128 File temp = context.getTempDirectory( null );
129 if( null != temp )
130 {
131 setTempDirectory( temp );
132 }
133
134 Map map = context.getResourceAliases( null );
135 if( null != map )
136 {
137 setResourceAliases( map );
138 }
139
140 boolean extractionPolicy = context.getExtractionPolicy( true );
141 setExtractWAR( extractionPolicy );
142
143 PermissionCollection permissions = context.getPermissions( null );
144 if( null != permissions )
145 {
146 setPermissions( permissions );
147 }
148 }
149 }